package br.com.sgc.session;

import java.util.Calendar;
import java.util.Date;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import br.com.sgc.dao.CaixaDao;
import br.com.sgc.entities.financeiro.Caixa;
import br.com.sgc.entities.geral.Clinica;
import br.com.sgc.exception.ValidacaoException;

@Stateless
public class CaixaSession extends GenericSession<Caixa> {

	private static final long serialVersionUID = 516840616491515162L;
	
	@EJB private CaixaDao dao;
	
	public Caixa findSaldoAnterior(Clinica clinica, Date dataCaixa){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dataCaixa);
		calendar.add(Calendar.DATE, -1);
		Caixa caixa = dao.findByDate(clinica, calendar.getTime());
		if(caixa == null){
			if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
				calendar.add(Calendar.DATE, -1);
				caixa = dao.findByDate(clinica, calendar.getTime());
				
				if(caixa == null){
					if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
						calendar.add(Calendar.DATE, -1);
						caixa = dao.findByDate(clinica, calendar.getTime());
					}
				}
			}
		}
		return caixa;
	}

	public Caixa findByDate(Clinica clinica, Date dataCaixa) {
		return dao.findByDate(clinica, dataCaixa);
	}

	public void caixaFechado(Clinica clinica) throws ValidacaoException {
		Caixa caixa = dao.findByDate(clinica, new Date());
		if(caixa != null && caixa.getFechado()){
			throw new ValidacaoException("O Caixa deste dia encontra-se fechado. Favor reabrir o caixa para efetuar a transação.");
		}
		
	}

}
